<template>
  <div>
    <div class="demo-upload-list" v-for="item in uploadList">
      <template v-if="item.status === 'finished'">
        <img :src="item.url" />
        <div class="demo-upload-list-cover">
          <Icon type="ios-eye-outline" @click.native="handleView(item.url)"></Icon>
          <Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>
        </div>
      </template>
      <template v-else>
        <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
      </template>
    </div>
    <Upload
      ref="upload"
      v-show="uploadList.length<uploadNum"
      :show-upload-list="false"
      :default-file-list="uploadList"
      :on-success="handleSuccess"
      :format="['jpg','jpeg','png']"
      :max-size="2048"
      :on-format-error="handleFormatError"
      :on-exceeded-size="handleMaxSize"
      :before-upload="handleBeforeUpload"
      multiple
      type="drag"
      :action="urlFile"
      style="display: inline-block;width:58px;"
    >
      <div style="width: 58px;height:58px;line-height: 58px;">
        <Icon type="ios-camera" size="20"></Icon>
      </div>
    </Upload>
    <Modal title="View Image" v-model="visible">
      <img :src="imgUrl" v-if="visible" style="width: 100%" />
    </Modal>
  </div>
</template>
<script lang="ts">
import { Component, Vue, Prop, Watch } from "vue-property-decorator";
import AbpBase from "../../lib/abpbase";
import AppConsts from "../../lib/appconst";

@Component
export default class uploadImg extends AbpBase {
  //=============================变量=============================
  @Prop({ type: Number, default: 1 }) uploadNum: Number;
  @Prop() defaultList: any;
  imgUrl = "";
  visible = false;
  uploadList = [
    // {
    //   name: "a42bdcc1178e62b4694c830f028db5c0",
    //   url: "https://o5wwk8baw.qnssl.com/a42bdcc1178e62b4694c830f028db5c0/avatar"
    // }
  ];
  urlFile = "";
  //=============================监听=============================
  @Watch("defaultList", { deep: true })
  handleWatch() {
    var tmpData = JSON.parse(JSON.stringify(this.defaultList));
    tmpData.forEach(el => {
      el.url = AppConsts.remoteServiceBaseUrl + "/" + el.url;
      el.status = "finished";
    });
    this.uploadList = tmpData;
    console.log("监听上面数组的内容");
  }
  //=============================方法=============================
  handleView(url) {
    this.imgUrl = url;
    this.visible = true;
  }

  handleRemove(file) {
    console.log(this.$refs.upload as any);
    var fileList = (this.$refs.upload as any).fileList;
    console.log(fileList);
    (this.$refs.upload as any).fileList.splice(fileList.indexOf(file), 1);
    this.uploadList.splice(fileList.indexOf(file), 1);
  }
  handleSuccess(res, file) {
    file.url = AppConsts.remoteServiceBaseUrl + "/" + res.result.fileUrl;
    //console.log(file.url);

    file.name = res.result.fileName;
    this.uploadList.push(file);
    this.$emit("save-success", res.result);
  }
  handleFormatError(file) {
    this.$Notice.warning({
      title: "The file format is incorrect",
      desc:
        "File format of " +
        file.name +
        " is incorrect, please select jpg or png."
    });
  }
  handleMaxSize(file) {
    this.$Notice.warning({
      title: "Exceeding file size limit",
      desc: "File  " + file.name + " is too large, no more than 2M."
    });
  }
  handleBeforeUpload() {
    const check = this.uploadList.length < 5;
    if (!check) {
      this.$Notice.warning({
        title: "Up to five pictures can be uploaded."
      });
    }
    return check;
  }
  mounted() {
    this.uploadList = (this.$refs.upload as any).fileList;
    this.urlFile = AppConsts.urlFile;
  }
}
</script>
<style>
.demo-upload-list {
  display: inline-block;
  width: 60px;
  height: 60px;
  text-align: center;
  line-height: 60px;
  border: 1px solid transparent;
  border-radius: 4px;
  overflow: hidden;
  background: #fff;
  position: relative;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
  margin-right: 4px;
}
.demo-upload-list img {
  width: 100%;
  height: 100%;
}
.demo-upload-list-cover {
  display: none;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.6);
}
.demo-upload-list:hover .demo-upload-list-cover {
  display: block;
}
.demo-upload-list-cover i {
  color: #fff;
  font-size: 20px;
  cursor: pointer;
  margin: 0 2px;
}
</style>

